PROFDINFO.COM

Votre enseignant d'informatique en ligne

Labo 3 - Édition de fichiers de configuration

Retour à la page du cours

Rappels et notions supplémentaires

 

Expansion de variables: lorsque bash rencontre un nom de variable précédé d'un signe de dollar (par exemple $HOME), cette variable est remplacée par sa valeur dans la commande. Le résultat est ensuite exécuté comme si cette valeur était ce qui avait été tapé dès le départ.

Substitution de commandes: lorsque bash rencontre un nom de commande placé entre apostrophes inversées (par exemple `whoami`) cette commande est exécutée d'abord, puis remplacée par sa sortie standard avant que la commande entière soit exécutée.

Par exemple:

  • La commande whoami retourne comme sortie le nom de l'usager qui la tape (pratique si vous utilisez plusieurs comptes à la fois et que votre propre n'affiche pas votre nom - on verra plus tard que c'est également pratique dans les scripts). Si je suis logué en tant que georges et que je tape whoami, le résultat sera simplement:
  • georges
  • Si je définis une variable en écrivant MOI=whoami, cette variable contiendra tout simplement le mot whoami.
  • Si je définis plutôt ma variable en écrivant MOI=`whoami`, cette variable contiendra le résultat de la commande whoami, donc georges. En effet, la commande whoami sera d'abord exécutée et remplacée par sa sortie. La déclaration de variable devient alors: MOI=georges. Cette ligne est ensuite exécutée telle quelle.

Les apostrophes inversées sur un clavier anglais sont normalement sur la touche à gauche du 1 sur le clavier. Sur un clavier français, il suffit de faire un accent grave suivi d'un espace. Il ne faut surtout pas confondre `apostrophes inversées` et 'apostrophes standard'.

Si vous ne trouvez pas les apostrophes inversées, vous pouvez également utiliser la notion alternative $(whoami) - c'est à dire, placer la commande entre parenthèses et précéder le tout d'un signe de dollar.

Chercher dans le man: si on fait man suivi du nom d'une commande, on se retrouve dans la page man de la commande et on peut en apprendre beaucoup sur son fonctionnement. Toutefois, que peut-on faire si on cherche une commande dont on ignore le nom, simplement pour voir si ça existe?

On peut simplement faire man -k suivi d'un mot-clé et man nous retournera la liste des pages man contenant ce mot-clé dans leur description. On pourra ensuite faire man suivi d'un nom de commande que l'on veut vérifier.

Le numéro qui est placé entre parenthèses après le nom de la commande lorsqu'on fait man -k représente le chapitre du manuel dans lequel la commande se trouve. Les commandes standards sont dans le chapitre 1. Les commandes d'administration sont dans le chapitre 8. Les autres chapitres ne sont pas des commandes alors il est inutile d'aller lire ces pages pour l'instant.

Il est évidemment possible de découvrir cette information si on fait man man...

Exécuter un script dans le shell courant: on peut forcer un script (un fichier contenant des commandes, comme les fichiers de configuration) à s'exécuter dans le shell courant (plutôt que dans un shell enfant comme Linux le ferait par défaut) en utilisant la commande source nomDeFichier.

Je peux également faire . nomDeFichier, ça revient au même. À ne pas confondre avec ./nomDeFichier.

Quelques exercices

1- Apportez des changements à votre .profile - ajoutez une ligne qui permet d'écrire rename pour exécuter mv, par exemple... Cette section vous rafraîchira peut-être la mémoire. Tentez de le faire avec vi.

Quittez vi et sauvegardez votre .profile.

Rechargez le .profile dans le shell courant, sans vous déloguer.

Vérifiez que les changements ont bel et bien été apportés.

Où aurait-on normalement préféré ajouter notre alias rename et pourquoi?

 

2- Ajoutez ce qui suit à votre propre environnement par défaut (celui de votre "login shell"):

Quel fichier allez-vous modifier?

 

Qu'allez-vous y ajouter?

 


Vérifiez que ça a bien fonctionné, sans vous débrancher ou changer de session de travail.

 

3- Ajoutez ce qui suit à votre propre environnement. Vous voulez que ces nouvelles commandes soient utilisables en mode "login shell" comme en mode interactif (avec su):

  • la ou les instruction(s) suffisante(s) pour que, lorsqu’on tape gocfg, notre répertoire courant devienne /etc
  • la ou les instruction(s) suffisante(s) pour que, lorsqu’on tape bye, une séquence de fermeture de l’ordinateur soit mise en marche de telle sorte que l’ordinateur s’éteigne dans 5 minutes, et que le message "On ferme dans 5 minutes" soit envoyé à tous les usagers (shutdown vous sera sans doute utile ici).


Quel fichier allez-vous modifier?

 

Qu'allez-vous y ajouter?

 


Vérifiez que ça a bien fonctionné, sans vous débrancher ou changer de session de travail.

4- Ajoutez ce qui suit à l'environnement de tous les usagers (celui du "login shell"):

  • la ou les instruction(s) suffisante(s) pour que, lorsqu’on tape h, les vingt plus récentes commandes exécutées par l’usager soient listées à la sortie standard (pensez au mot historique);
  • la ou les instruction(s) suffisante(s) pour qu’une variable MOI contenant le nom de l’usager (ex: eforest) soit ajoutée à son environnement (cette commande doit fonctionner pour tout le monde!);
  • la ou les instruction(s) suffisante(s) pour qu’une variable MAGANG contenant le(s) groupe(s) dont l’usager fait partie (ex:  admin) soit ajoutée à son environnement.  Il existe une commande fort utile qui retourne le(s) groupe(s) dont l'usager fait partie et son nom est assez intuitif...

Quel fichier allez-vous modifier?

 

Qu'allez-vous y ajouter?

 

 

 


Vérifiez que ça a bien fonctionné, sans vous débrancher ou changer de session de travail.